package tmetroJson;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import study.itwill.common.HttpHandler;



public class tmetroJson {

	
	public ArrayList<tmetroJsonItem> getMetroJsonItem(String code,int day, int course) {
		
		
	
		
		// 객체를 담기 위한 ArrayList
		ArrayList<tmetroJsonItem> timeList = null;

		/** 통신처리 */
		// 접속할 주소
		final String URL = "http://openAPI.seoul.go.kr:8088/646f6374617232303930/xml/SearchSTNTimeTableByIDService/1/500/"
				+code+"/"+day+"/"+course+"/";
		// 접속 후 결과를 리턴받기
		InputStream is = HttpHandler.connect(URL, "UTF-8");

		// 결과가 null이라면 통신에 실패한 상황이므로...
		if (is == null) {
			System.out.println("통신에러 발생함");
			// 강제 종료
			return null;
		}
		

		/************ XML 데이터 처리 시작 ***********/

		// XML파서 생성기
		XmlPullParserFactory factory = null;
		// XML파서 객체 <-- 예가 주인공
		XmlPullParser parser = null;

		try {
			// 객체 생성
			factory = XmlPullParserFactory.newInstance();
			parser = factory.newPullParser();

			/**
			 * 읽은 내용(InputStream)을 parser에게 전달 파일의 인코딩 타입을 지정해 주어야 함
			 */
			parser.setInput(is, "UTF-8");

			// 읽은 태그의 이름
			String tag = null;
			// 읽고 있는 태그의 종류 (문서의 시작, 문서의 끝, 시작태그, 끝태그)
			int type = parser.getEventType();

			/** 읽은 내용을 담기 위한 변수 */
             String STATION_NM =null;
             String STATION_CD= null; 	  
        	 String ARRIVETIME= null; 
        	 String SUBWAYENAME= null; 
        	 String ORIGINSTATION= null; 
        	 String DESTSTATION = null; 
        	 String EXPRESS_YN  = null;
        	 String LINE_NUM = null;

			/** 목록을 담기 위한 리스트 */
			timeList = new ArrayList<tmetroJsonItem>();

			// 파싱 처리를 위한 반복 시작
			while (type != XmlPullParser.END_DOCUMENT) {
				// 읽은 태그의 이름
				tag = parser.getName();

				// 현재 읽고 있는 태그의 종류별로 분기
				switch (type) {
				case XmlPullParser.START_TAG:
					if (tag.equals("STATION_NM")) {
						parser.next();
						STATION_NM = parser.getText();
					} else if (tag.equals("STATION_CD")) {
						parser.next();
						STATION_CD = parser.getText();
					}  else if (tag.equals("ARRIVETIME")) {
						parser.next();
						ARRIVETIME = parser.getText();
					} else if (tag.equals("SUBWAYENAME")) {
						parser.next();
						SUBWAYENAME = parser.getText();
					} else if (tag.equals("ORIGINSTATION")) {
						parser.next();
						ORIGINSTATION = parser.getText();
					} else if (tag.equals("DESTSTATION")) {
						parser.next();
						DESTSTATION = parser.getText();
					} else if (tag.equals("EXPRESS_YN")) {
						parser.next();
						EXPRESS_YN = parser.getText();
					} else if (tag.equals("LINE_NUM")) {
						parser.next();
						LINE_NUM = parser.getText();
					}
					break;

				case XmlPullParser.END_TAG:

					/**
					 * 데이터의 단위를 표현하는 태그가 종료되었을 때, 추출된 데이터를 하나로 모아서 객채로 변환
					 */
					if (tag.equals("row")) {
						// 하나의 정보를 담은 객체를 직접 생성
						tmetroJsonItem item2 = new tmetroJsonItem(LINE_NUM, STATION_NM ,STATION_CD, ARRIVETIME, SUBWAYENAME, 
								ORIGINSTATION,DESTSTATION, EXPRESS_YN);
						// 리스트에 추가
						timeList.add(item2);
						
						
					}
					break;
				}

				// 다음 태그로 이동하고, 상태값을 변경
				type = parser.next();
			}

		} catch (XmlPullParserException e) {
			System.out.println("파서 생성 실패 >> " + e.toString());
		} catch (IOException e) {
			System.out.println("파서 읽기 실패 >> " + e.toString());
		}

		/************ XML 데이터 처리 끝 ***********/

		return timeList;
	}
}
